package com.xltq.service.impl;

import com.xltq.dao.ICartDao;
import com.xltq.dao.IProductDao;
import com.xltq.dao.impl.ICartDaoImpl;
import com.xltq.dao.impl.IProductDaoImpl;
import com.xltq.entity.Cart;
import com.xltq.entity.Product;
import com.xltq.service.ICartService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;

//实现购物车业务逻辑
public class ICartServiceImpl implements ICartService {
    //提供购物车DAO层操作对象
    private ICartDao cartDao = new ICartDaoImpl();
    @Override
    public void crateCart(int uid, int pid) throws Exception {
        //1.需要先判断用户是否存在购物车
        Cart cart = cartDao.hasCat(uid, pid);
        if(Objects.nonNull(cart)){
            //商品已经被添加到购物车中(这名用户已经购物车对象,并且添加了商品),相同商品数量+1
            cart.setCnum(cart.getCnum()+1);
            //更新购物车中商品信息
            cartDao.updateCart(cart);
        }else{
            //购物车中什么都没有
            //需要直到添加了什么商品到购物车中--> 已经提供商品id
            IProductDao productDao = new IProductDaoImpl();
            Product product = productDao.selectProductByid((pid+""));
            //将商品信息添加到购物车中
            Cart cart1  = new Cart();
            //因为是第一次添加这个商品,所以商品数量是1
            cart1.setCnum(1);
            //购物车表中存的是商品id不是商品的详细信息,通过id查询商品信息的
            cart1.setPid(pid);
            //存储那个用户购买的商品信息
            cart1.setUid(uid);
            //以上这些是为了存在表中以便于我们查询操作使用
            //但是在代码中我们已经获取到了商品信息,所以直接存在cart1实体类中添加商品信息
            cart1.setProduct(product);

            //更新到cart购物车表中(不会将product这个对象更新到表中,这个对象是为了我们方便操作)

            cartDao.insertCart(cart1);

        }
    }

    @Override
    public List<Cart> findAll(int uid) throws Exception {
        return  cartDao.selectCartByUid(uid);
    }

    @Override
    public void deleteCartByCid(int cid) throws Exception {
            cartDao.deleteCartByCid(cid);
    }

    @Override
    public void updateCartByCid(String cid, String price, String num) throws Exception {
              //1.需要将价格和数量 存储在BigDecimal对象中
        BigDecimal cnum = new BigDecimal(num);//商品数量
        BigDecimal cprice = new BigDecimal(price);//商品结构
        //计算结果(计算小计)
        BigDecimal multiply= cprice.multiply(cnum);
        //2.更新数据信息
        cartDao.updateByCid(multiply, cnum, Integer.valueOf(cid));
    }

    @Override
    public void clearCart(String uid) throws Exception {
            cartDao.deleteCartByUid(Integer.valueOf(uid));
    }
}
